var InterlockBooking = function() {
};

InterlockBooking.prototype = {
    constructor : InterlockBooking,
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 실시간 예약
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 실시간 예약 부킹 리스트 가져오는 연동
     */
    getRsvBookingData : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservSearchList");

        objJson.putParameter("search", $data.search);
        objJson.putParameter("search_date_m", $data.date);

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            console.log("reservSearchList :: success");
            // console.log("JSON :: " + JSON.stringify($response));
            if (new MJson().checkServiceResult($response)) {
                console.log("reservSearchList :: serviceresult :: success");
                var items = $response.msp.contents.items;
                var result = new Array();

                if (items == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                if (!items.length) {
                    // items 이 배열이 아닌 Object 일경우
                    var obj = {
                        // 날짜
                        date : items.reserv__date,
                        // 지역 ID
                        area_id : items.region,
                        // 클럽 ID
                        club_id : items.golfclub__id,
                        // 클럽 이름
                        club_name : items.golfclub__name,
                        // 코스 ID
                        course_id : items.course__info__id,
                        // 코스 이름
                        course_name : items.course__info__name
                    };
                    result.push(obj);
                } else {
                    // items 이 배열일 경우
                    var i = 0;
                    while (i < items.length) {
                        var item = items[i];
                        var obj = {
                            // 날짜
                            date : item.reserv__date,
                            // 지역 ID
                            area_id : item.region,
                            // 클럽 ID
                            club_id : item.golfclub__id,
                            // 클럽 이름
                            club_name : item.golfclub__name,
                            // 코스 ID
                            course_id : items.course__info__id,
                            // 코스 이름
                            course_name : items.course__info__name
                        };
                        result.push(obj);
                        i++;
                    }
                }

                // 콜백 함수 호출
                $successFnc(result);
            }
        }, function($err) {
            // Error
        });
    },
    /**
     * 일자별 실시간 예약 부킹 데이터 가져오기
     */
    getTimeBookingDataByDate : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservSelectedList");

        objJson.putPub(MJson.PUB.LISTCOUNT, 10);
        objJson.putPub(MJson.PUB.CURRPAGENO, $data.curPage);

        objJson.putParameter("search", $data.search);
        objJson.putParameter("reserv_date", $data.date);
        // objJson.putParameter("region", $data.region);

        // console.log(objJson.getJsonString());

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            // console.log("reservSearchGolfclub :: success");
            if (new MJson().checkServiceResult($response)) {
                console.log("JSON :: " + JSON.stringify($response));
                // console.log("reservSearchGolfclub :: serviceresult :: success");
                var items = $response.msp.contents.items;
                var result = new Array();

                if (items == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                if (!items.length) {
                    // items 이 배열이 아닌 Object 일경우
                    var obj = {
                        // 예약 번호 : reserv__seq
                        "reserv_num" : items.reserv__seq,
                        // 지역 : region
                        "area" : items.region,
                        // 예약 날짜 : reserv__date
                        "date" : items.reserv__date,
                        // 예약 시간 : reserv__time
                        "time" : items.reserv__time,
                        // 골프장 ID : golfclub__id
                        "club_id" : items.golfclub__id,
                        // 골프장 이름 : golfclub__name
                        "club_name" : items.golfclub__name,
                        // 코스 ID : course__info__id1, course__info__id2, course__info__id3
                        "course_id" : [items.course__info__id1, items.course__info__id2, items.course__info__id3],
                        // 코스 이름 : course__info__name1, course__info__name2, course__info__name3
                        "course_name" : [items.course__info__name1, items.course__info__name2, items.course__info__name3],
                        // 홀 : hole
                        "hole" : items.hole,
                        // 가격 : price
                        "price" : items.price,
                        // 그린피 : greenfee
                        "greenfee" : items.greenfee,
                        // 이벤트 - 그린피 할인 여부 : greenfee__use__yn, 카트비 할인 여부 : cartfee__use__yn, 식비 할인 여부 : food__use__yn, 선물 여부 : present__use__yn, 기타 여부 : etc__use__yn
                        "event" : [items.greenfee__use__yn, items.cartfee__use__yn, items.food__use__yn, items.present__use__yn, items.etc__use__yn],
                        // 예약 여부 : reserv__status
                        "status" : items.reserv__status
                    };
                    result.push(obj);
                } else {
                    // items 이 배열일 경우
                    var i = 0;
                    while (i < items.length) {
                        var item = items[i];
                        var obj = {
                            // 예약 번호 : reserv__seq
                            "reserv_num" : item.reserv__seq,
                            // 지역 : region
                            "area" : item.region,
                            // 예약 날짜 : reserv__date
                            "date" : item.reserv__date,
                            // 예약 시간 : reserv__time
                            "time" : item.reserv__time,
                            // 골프장 ID : golfclub__id
                            "club_id" : item.golfclub__id,
                            // 골프장 이름 : golfclub__name
                            "club_name" : item.golfclub__name,
                            // 코스 ID : course__info__id1, course__info__id2, course__info__id3
                            "course_id" : [item.course__info__id1, item.course__info__id2, item.course__info__id3],
                            // 코스 이름 : course__info__name1, course__info__name2, course__info__name3
                            "course_name" : [item.course__info__name1, item.course__info__name2, item.course__info__name3],
                            // 홀 : hole
                            "hole" : item.hole,
                            // 가격 : price
                            "price" : item.price,
                            // 그린피 : greenfee
                            "greenfee" : item.greenfee,
                            // 이벤트 - 그린피 할인 여부 : greenfee__use__yn, 카트비 할인 여부 : cartfee__use__yn, 식비 할인 여부 : food__use__yn, 선물 여부 : present__use__yn, 기타 여부 : etc__use__yn
                            "event" : [item.greenfee__use__yn, item.cartfee__use__yn, item.food__use__yn, item.present__use__yn, item.etc__use__yn],
                            // 예약 여부 : reserv__status
                            "status" : item.reserv__status
                        };
                        result.push(obj);
                        i++;
                    }
                }

                // 총 갯수 저장
                var totalCnt = $response.msp.contents["@totalcount"];

                // 콜백 함수 호출
                $successFnc(result, totalCnt);
            }
        }, function($err) {
            // Error
        });
    },
    /**
     * 해당 예약 번호의 실시간 예약 상세 데이터 가져오기
     */
    getTimeBookingDetailData : function($reserv_id, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putClient(MJson.CLIENT.USERID, document.globalObj.LOGIN_DATA.userId);

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "getReservView");

        objJson.putParameter("reserv_seq", $reserv_id);
        // alert("getTimeBookingDetailData :: " + objJson.getJsonString());

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            // console.log("getReservView :: success");
            if (new MJson().checkServiceResult($response)) {
                // console.log("JSON :: " + JSON.stringify($response));
                // console.log("getReservView :: serviceresult :: success");
                var items = $response.msp.contents.items;

                if (items == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                // items 이 배열이 아닌 Object 일경우
                var obj = {
                    // 예약 번호
                    "reserv_id" : items.reserv__seq,
                    // 예약 날짜
                    "reserv_date" : items.reserv__date,
                    // 예약 시간
                    "reserv_time" : items.reserv__time,
                    // 예약 요일
                    "reserv_day" : items.reserv__day,
                    // 클럽 ID
                    "club_id" : items.golfclub__id,
                    // 클럽 이름
                    "club_name" : items.golfclub__name,
                    // 코스 ID
                    "course_id" : [items.course__info__id1, items.course__info__id2],
                    // 코스 이름
                    "course_name" : [items.course__info__name1, items.course__info__name2],
                    // 홀
                    "hole" : items.hole,
                    // 가격(정가)
                    "price" : items.price,
                    // 그린피(할인적용가)
                    "greenfee_pay" : items.greenfee,
                    // 가승인 금액
                    "price_pay" : items.price__pay,
                    // 그린피 할인
                    "greenfee" : {
                        "use" : items.greenfee__use__yn, // 사용 여부
                        "type" : items.greenfee__amt__type, // 할인 타입
                        "amount" : items.greenfee__discount__amount // 할인 내용
                    },
                    // 카트피
                    "cartfee" : {
                        "use" : items.cartfee__use__yn, // 사용 여부
                        "type" : items.cartfee__amt__type, // 할인 타입
                        "amount" : items.cartfee__discount__amount // 할인 내용
                    },
                    // 식사
                    "food" : {
                        "use" : items.food__use__yn, // 사용 여부
                        "type" : items.food__amt__type, // 할인 타입
                        "amount" : items.food__discount__amount // 할인 내용
                    },
                    // 선물
                    "present" : {
                        "use" : items.present__use__yn, // 사용 여부
                        "amount" : items.present__content // 선물 내용
                    },
                    // 기타
                    "etc" : {
                        "use" : items.etc__use__yn, // 사용 여부
                        "amount" : items.etc__content // 기타 내용
                    },
                    // 예약 종류
                    "reserv_type" : items.reserv__type,
                    // 결재 등급
                    "reserv_paytype" : items.reserv_paytype,
                    // 인원
                    "member" : items.member__cnt,
                    // 공개 여부
                    "open" : items.open__yn,
                    // 예약 상태
                    "status" : items.reserv__status,
                    // 코스 설명
                    "description" : items.description,
                    // 코스 알림
                    "course_notice" : items.course__notice
                };

                // 콜백 함수 호출
                $successFnc(obj);
            }
        }, function($err) {
            // Error
        });
    },
    /**
     * 예약 요청 연동
     */
    setReservation : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putClient(MJson.CLIENT.USERID, document.globalObj.LOGIN_DATA.userId);

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservAccess");

        if ($data.reserv_id != undefined)
            objJson.putParameter("reserv_seq", $data.reserv_id);
        if ($data.reserv_status != undefined)
            objJson.putParameter("reserv_status", $data.reserv_status);
        if ($data.card_number != undefined)
            objJson.putParameter("card_number", $data.card_number);
        if ($data.exp_year != undefined)
            objJson.putParameter("exp_year", $data.exp_year);
        if ($data.exp_month != undefined)
            objJson.putParameter("exp_month", $data.exp_month);
        if ($data.card_id_no != undefined)
            objJson.putParameter("card_id_no", $data.card_id_no);
        if ($data.card_pw != undefined)
            objJson.putParameter("card_pw", $data.card_pw);
        if ($data.pay_amt != undefined)
            objJson.putParameter("pay_amt", $data.pay_amt);
        if ($data.card_quota != undefined)
            objJson.putParameter("card_quota", $data.card_quota);

        // alert("getTimeBookingDetailData :: " + objJson.getJsonString());

        cm.requestGet(objJson.getJsonString(), $successFnc, $failFnc);
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 코스 데이터
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 지역별 골프 코스 요청 연동
     * 성공시 콜백 Parameter
     * {area_id : 지역 ID, club_id : 클럽 ID, club_name : 클럽 이름} 의 item 형식의 배열
     */
    getGolfClubData : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservSearchGolfclub");

        if ($data.area == 0) {
            // 전체 항목 일 경우
            objJson.putParameter("region", "");
        } else {
            objJson.putParameter("region", $data.area);
        }

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            // console.log("reservSearchGolfclub :: success");
            if (new MJson().checkServiceResult($response)) {
                // console.log("reservSearchGolfclub :: serviceresult :: success");
                var items = $response.msp.contents.items;
                var result = new Array();

                if (items == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                if (!items.length) {
                    // items 이 배열이 아닌 Object 일경우
                    var obj = {
                        // 지역 ID
                        area_id : items.region,
                        // 클럽 ID
                        club_id : items.golfclub__id,
                        // 클럽 이름
                        club_name : items.golfclub__name
                    };
                    result.push(obj);
                } else {
                    // items 이 배열일 경우
                    var i = 0;
                    while (i < items.length) {
                        var item = items[i];
                        var obj = {
                            // 지역 ID
                            area_id : item.region,
                            // 클럽 ID
                            club_id : item.golfclub__id,
                            // 클럽 이름
                            club_name : item.golfclub__name
                        };
                        result.push(obj);
                        i++;
                    }
                }

                // 콜백 함수 호출
                $successFnc(result);
            }
        }, function($err) {
            // Error
        });
    },
    /**
     * 코스 상세 데이터 연동
     */
    getCourseDetail : function($reserv_id, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "WR001");
        objJson.putPub(MJson.PUB.SERVICENAME, "getCourseDetailInfo");

        objJson.putParameter("reserveSeq", $reserv_id);

        cm.requestGet(objJson.getJsonString(), $successFnc, $failFnc);
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 웨이팅 예약
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 웨이팅 예약 리스트 가져오는 연동
     */
    getWaitingBookingData : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "WR001");
        objJson.putPub(MJson.PUB.SERVICENAME, "WatingreservMainSearchListAndroid");
        // TODO

        objJson.putParameter("dateS", $data.date);
        objJson.putParameter("search", $data.area);
        objJson.putParameter(MJson.PUB.LISTCOUNT, 1);
        objJson.putParameter(MJson.PUB.CURRPAGENO, 1);

        cm.requestGet(objJson.getJsonString(), $successFnc, $failFnc);
    },
    /**
     * 일자별 웨이팅 예약 부킹 데이터 가져오기
     */
    getWaitBookingDataByDate : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservSelectedList");
        // TODO
        objJson.putParameter("search", "");
        objJson.putParameter("reserv_date", $data.date);
        objJson.putParameter("region", $data.region);

        cm.requestGet(objJson.getJsonString(), $successFnc, $failFnc);
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 가격 정보
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 코스 가격 정보 데이터 가져오기
     */
    getCoursePrice : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "getGolfclubFee");

        objJson.putParameter("golfclub_id", $data.club_id);
        objJson.putParameter("course_info_id", $data.course_id);

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            // console.log("getGolfclubFee :: success");
            if (new MJson().checkServiceResult($response)) {
                // console.log("JSON :: " + JSON.stringify($response));
                // console.log("getGolfclubFee :: serviceresult :: success");
                var item = $response.msp.contents.items;

                if (item == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                // items 이 배열이 아닌 Object 일경우
                var obj = {
                    // 그린피
                    "greenfee" : {
                        "member" : {// 회원
                            // 주중
                            "weekday" : item.greenfee__weekday__member,
                            // 주말
                            "weekend" : item.greenfee__weekend__member
                        },
                        "non_member" : {// 비회원
                            // 주중
                            "weekday" : item.greenfee__weekday__non__member,
                            // 주말
                            "weekend" : item.greenfee__weekend__non__member
                        },
                        "week_member" : {// 주중회원
                            // 주중
                            "weekday" : item.greenfee__weekday__weekdaymember,
                            // 주말
                            "weekend" : item.greenfee__weekend__weekdaymember
                        },
                        "etc" : {// 기타
                            // 주중
                            "weekday" : null,
                            // 주말
                            "weekend" : null
                        }
                    },
                    // 카트피
                    "cartfee" : item.cartfee,
                    // 캐디피
                    "caddiefee" : item.caddiefee,
                    // 대여채비
                    "rentfee" : item.rentfee,
                    // 대여화
                    "rental_shoes" : item.rental__price,
                    // 팀 인원 제한
                    "course_mem_limit" : item.course__men__limit

                };

                // 콜백 함수 호출
                $successFnc(obj);
            }
        }, function($err) {
            // Error
        });
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 결제 관련
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 결제 데이터 가져오기
     */
    setPayData : function($data, $callback) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "setPayData");

        objJson.putParameter("reserv_seq", $data.reserv_id);
        objJson.putParameter("reserv_type", $data.reserv_type);
        console.log("test :: setPayData");
        
        console.log("request :: " + objJson.getJsonString());
        // return;
        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            console.log("setPayData :: success");
            
            if (new MJson().checkServiceResult($response)) {
                console.log("JSON :: " + JSON.stringify($response));
                // console.log("setPayData :: serviceresult :: success");
                var item = $response.msp.contents.items;

                if (item == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                // items 이 배열이 아닌 Object 일경우
                var obj = {
                    // MID
                    "mid" : item.mid,
                    // MKey
                    "mkey" : item.mkey,
                    // 전문생성일시
                    "edidate" : item.edidate,
                    // 해쉬코드
                    "hashcode" : item.hashcode,
                    // 가격
                    "price_pay" : item.price__pay
                };

                // 콜백 함수 호출
                $callback(obj);
            }
        }, function($err) {
            // Error
            console.log("setPayData Error");
            console.log($err);
            $callback("fail");
        });
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // My 설정
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * My 설정 데이터 가져오기
     * 성공시 콜백 Parameter
     * {area_id : 지역 ID, club_id : 클럽 ID, club_name : 클럽 이름} 의 item 형식의 배열
     */
    getMySetup : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putClient(MJson.CLIENT.USERID, document.globalObj.LOGIN_DATA.userId);

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "reservMyOption");

        cm.requestGet(objJson.getJsonString(), function($response) {
            // Success
            // console.log("reservMyOption :: success");
            if (new MJson().checkServiceResult($response)) {
                // console.log("reservMyOption :: serviceresult :: success");
                // console.log(JSON.stringify($response));
                var items = $response.msp.contents.items;
                var result = new Array();

                if (items == undefined) {
                    // 데이터가 하나도 없을 경우
                    // alert("해당 지역의 골프장이 없습니다.");
                    $successFnc(null);
                    return;
                }

                if (!items.length) {
                    // items 이 배열이 아닌 Object 일경우
                    var obj = {
                        // 지역 ID
                        area_id : items.region,
                        // 클럽 ID
                        club_id : items.golfclub__id,
                        // 클럽 이름
                        club_name : items.golfclub__name
                    };
                    result.push(obj);
                } else {
                    // items 이 배열일 경우
                    var i = 0;
                    while (i < items.length) {
                        var item = items[i];
                        var obj = {
                            // 지역 ID
                            area_id : item.region,
                            // 클럽 ID
                            club_id : item.golfclub__id,
                            // 클럽 이름
                            club_name : item.golfclub__name
                        };
                        result.push(obj);
                        i++;
                    }
                }

                // 콜백 함수 호출
                $successFnc(result);
            }
        }, function($err) {
            // Error
        });
    },
    /**
     * My 설정 데이터 저장
     */
    setMySetup : function($data, $successFnc, $failFnc) {
        var objJson = new MJson();
        var cm = new ConnectionManager();

        objJson.putClient(MJson.CLIENT.USERID, document.globalObj.LOGIN_DATA.userId);

        objJson.putPub(MJson.PUB.SID, "RS001");
        objJson.putPub(MJson.PUB.SERVICENAME, "regReservMyOption");

        objJson.putParameter("search", $data);

        cm.requestGet(objJson.getJsonString(), $successFnc, $failFnc);
    },
};
